const { CityModel } = require('../../models/index')

// 提供城市按照首字母进行分类的数据
const getCityCategoryData = async (req, res) => {
  try {
    const cities = await CityModel.findAll({
      attributes: ['city_id', 'name', 'first_key'],
      order: [['first_key', 'ASC'], ['name', 'ASC']]
    })

    // 对城市按照首字母进行分类
    const categoryCities = {}
    cities.forEach(item => {
      categoryCities[item.first_key] = categoryCities[item.first_key] || []
      categoryCities[item.first_key].push({ city_id: item.city_id, name: item.name })
    })

    // 转换对象为特定格式的数组  
    const FormData = Object.keys(categoryCities).map(key => categoryCities[key])

    res.status(200).json({
      title: '城市按照首字母分类数据',
      data: FormData
    })
  } catch (error) {
    res.status(500).json({
      error: error.message
    })
  }
}

// 获取热门城市数据
const getHotCityData = async (req, res) => {
  try {
    const hotCity = await CityModel.findAll({
      where: {
        is_hot: 1
      },
      attributes: ['city_id', 'name'],
      limit: 6
    })

    if (hotCity.length === 0) {
      return res.status(404).json({
        error: '未找到热门城市'
      })
    }

    res.status(200).json({
      title: '热门城市',
      data: hotCity
    })
  } catch (error) {
    res.status(500).json({
      error: error.message
    })
  }
}

// 根据城市名称查询城市ID
const getCityIDByName = async (req, res) => {
  try {
    // 获取城市名称
    const cityName = req.params.city_name

    // 城市名称为空的情况
    if (!cityName) {
      return res.status(400).json({
        error: '城市名称不能为空！'
      })
    }

    // 根据城市名称查询城市ID
    const cityID = await CityModel.findAll({
      where: {
        name: cityName
      },
      attributes: ['city_id', 'name']
    })

    if (cityID.length === 0) {
      return res.status(404).json({
        error: '未找到该城市'
      })
    }

    res.status(200).json({
      title: '城市ID',
      data: cityID[0]
    })
  } catch (error) {
    res.status(500).json({
      error: error.message
    })
  }
}

module.exports = {
  getCityCategoryData,
  getHotCityData,
  getCityIDByName
}
